 /*
    *  Copyright 2004 Thevert Liu  <thevert.liu@gmail.com>
    *
    *  Licensed under the Apache License, Version 2.0 (the "License");
    *  you may not use this file except in compliance with the License.
    *  You may obtain a copy of the License at
    *
    *      http://www.apache.org/licenses/LICENSE-2.0
    *
   *  Unless required by applicable law or agreed to in writing, software
  *  distributed under the License is distributed on an "AS IS" BASIS,
   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *  See the License for the specific language governing permissions and
   *  limitations under the License.
   */
#ifndef X2_XMLPARSER_H
#define X2_XMLPARSER_H

#include <XMLShell.h>
#include <XMLReader.h>

class IXMLParser
{
public:
    virtual ~IXMLParser() {}
    virtual bool parse(const std::string & xmlBody, const std::string& name, IXMLElement& result, std::string& error, XMLContext* ctx) = 0 ;
    virtual bool toXML(IXMLElement& root, std::ostream& os, XMLContext* ctx) = 0 ;
} ;

class XMLParser
{
public:
    static bool parse( 
                       const std::string & xmlBody, 
                       const std::string& name, 
                       IXMLElement& result, 
                       std::string& error,
                       XMLContext* ctx = NULL
                     ) ;
    
    static bool toXML(IXMLElement& root, std::ostream& os, XMLContext* ctx=NULL) ;
    
    static void setXMLParserCreator(ICreator<IXMLParser>::CreateFunc func) {
        mCreate = func ;
    };
    
private:

    static ICreator<IXMLParser>::CreateFunc mCreate ;
    
} ;

#endif //X2_XMLPARSER_H
